#include <vector>
using namespace std;
class Solution
{
public:
    int singleNumber(vector<int> &nums)
    {
        // 模拟第一类题的两次清0，这题要模拟的是三次清0
        // 显然，一个二进制位不足以模拟，因此需要两个二进制位
        int a = 0, b = 0;
        // 如何设计数字电路呢？
        for (auto e : nums)
        {
            // b^e后，如果前面是1那就要变成0，如果前面是0保持不变
            b = (b ^ e) & (~a);
            // 只有后面是0才可能进位，而如果后面是0
            // 要么就是a的该位是1，又或者b和e相等
            a = (a ^ e) & (~b);
        }
        return b;
    }
};